package bloque;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Random;
import java.util.Scanner;

import bloque.*;

public class InspectorArbol {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
/*		BufferNodos buffer = null;
		try {
			buffer = new BufferNodos(new model.archivo.ArchivoBloques("/home/gustavo/arbolB.dat",512));
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			Hoja hoja = buffer.leerHoja(18);
			System.out.println(hoja.getPalabra(hoja.getMayorRegistro()));
//			hoja.getListaRegistroTermino().remove(hoja.getListaRegistroTermino().size()-1);
			hoja.removerRegistro(hoja.getMayorRegistro());
			buffer.guardar(hoja);
						
		} catch (ArbolBSharpException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		
		
		
		Arbol arbol = new Arbol();
		String aux = null;
		Random generator = new Random();
		RegistroHoja reg = new RegistroHoja();
		for (int i = 0; i <= 10; i++){
			try {
				aux = new String(""+ generator.nextInt(100000));
				arbol.insertar(aux,generator.nextInt(100000), 0);
				System.out.println(i+"-\t\t Clave: "+aux);
				}
					
			 catch (ArbolBSharpException e2) {
				// TODO Auto-generated catch block
				e2.printStackTrace();
			}

		}
		/*if(args.length==0){
			System.out.println("Debe especificar el archivo a abrir como parametro");
			return;
		}
		
		File archivo = new File("arbolB.dat");
		
		if(!archivo.exists() || archivo.isDirectory()){
			System.out.println("El archivo no existe o es un directorio");
			return;
		}
		*/
		
		
		int cantidadNodos = 0;
		Scanner sc = new Scanner(System.in);
		try {
			ArchivoBloques buffer = new ArchivoBloques("ArchivoArbol.dat", 128);
			System.out.println("INSPECTOR DE NODOS");
			System.out.println(" Ingrese el numero de nodo que desea inspeccionar, o -1 para salir");
			System.out.println("Archivo de arbol abierto con exito");
			cantidadNodos = (int) buffer.GetCantidadBloques();
			System.out.println("Cantidad de nodos: " + cantidadNodos);			
			int nodo;
			System.out.print(">");
			while((nodo=sc.nextInt())!=-1){
				if(nodo>=cantidadNodos){
					System.out.println("No existe ese nodo en el archivo");
				} else {
					try{
						imprimirNodo(buffer.leerNodo(nodo));
					}catch(ArbolBSharpException a){
						try{
						imprimirHoja(buffer.leerHoja(nodo));
						}catch(ArbolBSharpException b){
							b.printStackTrace();
						}
					}
				}
				System.out.print(">");
			}
		} catch (IOException e1) {
			e1.printStackTrace();
		} catch (ArbolBSharpException e) {
			e.printStackTrace();
		}
	}
	
	
	private static void imprimirHoja(Hoja leerHoja) {
		System.out.println("Tipo de nodo: hoja");
		System.out.println("Numero de nodo: " + leerHoja.getPosicionEnArchivo());
		System.out.println("Nivel: 0");
		System.out.println("Cantidad de registros: " + leerHoja.cantidadRegistros());
		
		if(leerHoja.getPunteroASiguiente()==null){
			System.out.println("Siguiente hoja: ninguna");			
		} else {
			System.out.println("Siguiente hoja: " + leerHoja.getPunteroASiguiente());
		}		
		System.out.println("Listado de terminos:");
		for(RegistroHoja registro : leerHoja.getListaRegistroTermino())
			System.out.print("( Termino: "+registro.getTermino()+"\t Palabra: " + leerHoja.getPalabra(registro) + "\t, Offset: "  + registro.getOffset() + "\t, pesoGlobal:"+registro.getPesoGlobal()+") \n");
	}

	private static void imprimirNodo(Node leerNodo) {
		System.out.println("Tipo de nodo: no hoja");
		System.out.println("Numero de nodo: " + leerNodo.getPosicionEnArchivo());
		System.out.println("Nivel: " + leerNodo.getNivel());
		System.out.println("Cantidad de prefijos: " + leerNodo.cantidadPrefijos());

		System.out.println("Listado de prefijos:");
		for(int i=0; i<leerNodo.getListaPrefijos().size(); i++){
			System.out.print(leerNodo.getListaPunteros().get(i) + " ");
			System.out.print(leerNodo.getListaPrefijos().get(i) + " \n");			
		}
		System.out.println("\n");		
	}
}
